#ifndef MODEL_CASE_ENTITY_HPP
#define MODEL_CASE_ENTITY_HPP

#include "Model/ModelConfig.hpp"
#include <boost/noncopyable.hpp>
#include <boost/any.hpp>

namespace Model
{


/// @ingroup Model
/// @brief It is the base class for all the model entities.
class MODEL_API CaseEntity: boost::noncopyable
{
protected:
	/// @brief It initializes the entity.
	CaseEntity();

	/// @brief It initializes the stored identifier of the entity.
	/// @param storedID the identifier that can be used by storage policy to identify the entity while performing 
	///		persistence operations.
	CaseEntity( const boost::any& storedID);

public:
	/// @brief Dummy destructor.
	virtual ~CaseEntity() { }

	/// @brief It gets the identifier of the entity.
	const boost::any& storedID() const { return storedID_; }

	/// @brief It sets the identifier that can be used by storage policy to identify the entity while performing 
	///		persistence operations.
	void setStoredID( const boost::any& storedID);

private:
	boost::any storedID_;
};

} // namespace Model

#endif // MODEL_CASE_ENTITY_HPP
